#!/bin/bash
s1_read_last_two_bytes_of_a_mbr_backup_file() {
local file_path=$1
if [ ! -f "$file_path" ];then
echo "Error: File not found."
return 1
fi
local last_bytes=$(tail -c 2 "$file_path" | od -A n -t x1 | tr -d ' \n')
if [ "$last_bytes" = "55aa" ];then
echo "YES"
else
echo "NO"
fi
}
s2_read_mbr_partition_table_info() {
local file_path=$1
if [ ! -f "$file_path" ]; then
echo "Error: file not found."
return 1
fi
echo "Reading up to 4 primary partitions from MBR:"
for i in {0..3}; do
offset=$((446 + i * 16))
start_sector=$(dd if="$file_path" bs=1 skip=$((offset + 4)) count=4 2>/dev/null | od -An -tu4 | tr -d '\n')
if [ "$start_sector" -eq 0 ];then
continue
fi
size_sector=$(dd if="$file_path" bs=1 skip=$((offset + 8)) count=4 2>/dev/null | od -An -tu4 | tr -d ' \n')
end_sector=$((start_sector + size_sector - 1))
echo "$start_sector $end_sector"
done
}
s3_parse_partition_info() {
local fdisk_output=$(cat)
if [ -z "$fdisk_output" ];then
echo "Error: No fdisk output provided."
return 1
fi
disk_size_bytes=$(echo "$fdisk_output" | grep "Disk /dev/vda:" | awk '{print $5}')
disk_size_sectors=$(echo "$fdisk_output" | grep "Disk /dev/vda:" | awk '{print $7}')
physical_sector_size=$(echo "$fdisk_output" | grep "Sector size" | awk '{print $4}')
first_partition_start_sector=$(echo "$fdisk_output" | grep "/dev/vda1" | awk '{print $3}')
first_partition_end_sector=$(echo "$fdisk_output" | grep "/dev/vda1" | awk '{print $4}')
first_partition_type=$(echo "$fdisk_output" | grep "/dev/vda1" | awk '{print $8}')
echo "disk size in bytes:$disk_size_bytes"
echo "disk size in sectors:$disk_size_sectors"
echo "physical sector size in bytes:$physical_sector_size"
echo "first partition start sector id:$first_partition_start_sector"
echo "first partition end sector id:$first_partition_end_sector"
echo "first partition type:$first_partition_type"
}
s4_run_passwd_as_plain_user_and_get_status() {
local oversleeping_path=$(which oversleeping)
if [ -z "$oversleeping_path" ]; then
echo "Error: oversleeping command not found."
return 1
fi
sudo install -m 4755 "$oversleeping_path" "$oversleeping_path.tmp" && mv "$oversleeping_path.tmp" "$oversleeping_path"
sleep 1
ps -o uid,euid,ruid -C oversleeping | awk 'NR>1 {print $1","$2","$3}'
}
s5_add_a_scheduled_task() {
(crontab -l 2>/dev/null;echo "*/5 * * * * date +'%Y%m%d_%H%M%S' >> $HOME/test_crontab.log") | crontab -
}


